Download this file

1737 lines (1737 with data), 130.1 kB

{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "machine_shape": "hm"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "8XnVMPBXmtRa"
      },
      "source": [
        "# TensorNetworks in Neural Networks.\n",
        "\n",
        "Here, we have a small toy example of how to use a TN inside of a fully connected neural network.\n",
        "\n",
        "First off, let's install tensornetwork"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7HGRsYNAFxME"
      },
      "source": [
        "# !pip install tensornetwork\n",
        "\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import tensorflow as tf\n",
        "# Import tensornetwork\n",
        "import tensornetwork as tn\n",
        "import random\n",
        "import time\n",
        "# Set the backend to tesorflow\n",
        "# (default is numpy)\n",
        "tn.set_default_backend(\"tensorflow\")\n",
        "np.random.seed(42)\n",
        "random.seed(42)\n",
        "tf.random.set_seed(42)"
      ],
      "execution_count": 14,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "g1OMCo5XmrYu"
      },
      "source": [
        "# TensorNetwork layer definition\n",
        "\n",
        "Here, we define the TensorNetwork layer we wish to use to replace the fully connected layer. Here, we simply use a 2 node Matrix Product Operator network to replace the normal dense weight matrix.\n",
        "\n",
        "We TensorNetwork's NCon API to keep the code short."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wvSMKtPufnLp"
      },
      "source": [
        "class TNLayer(tf.keras.layers.Layer):\n",
        "\n",
        "  def __init__(self):\n",
        "    super(TNLayer, self).__init__()\n",
        "    # Create the variables for the layer.\n",
        "    self.a_var = tf.Variable(tf.random.normal(shape=(32, 32, 2),\n",
        "                                              stddev=1.0/32.0),\n",
        "                             name=\"a\", trainable=True)\n",
        "    self.b_var = tf.Variable(tf.random.normal(shape=(32, 32, 2),\n",
        "                                              stddev=1.0/32.0),\n",
        "                             name=\"b\", trainable=True)\n",
        "    self.bias = tf.Variable(tf.zeros(shape=(32, 32)),\n",
        "                            name=\"bias\", trainable=True)\n",
        "\n",
        "  def call(self, inputs):\n",
        "    # Define the contraction.\n",
        "    # We break it out so we can parallelize a batch using\n",
        "    # tf.vectorized_map (see below).\n",
        "    def f(input_vec, a_var, b_var, bias_var):\n",
        "      # Reshape to a matrix instead of a vector.\n",
        "      input_vec = tf.reshape(input_vec, (32, 32))\n",
        "\n",
        "      # Now we create the network.\n",
        "      a = tn.Node(a_var)\n",
        "      b = tn.Node(b_var)\n",
        "      x_node = tn.Node(input_vec)\n",
        "      a[1] ^ x_node[0]\n",
        "      b[1] ^ x_node[1]\n",
        "      a[2] ^ b[2]\n",
        "\n",
        "      # The TN should now look like this\n",
        "      #   |     |\n",
        "      #   a --- b\n",
        "      #    \\   /\n",
        "      #      x\n",
        "\n",
        "      # Now we begin the contraction.\n",
        "      c = a @ x_node\n",
        "      result = (c @ b).tensor\n",
        "\n",
        "      # To make the code shorter, we also could've used Ncon.\n",
        "      # The above few lines of code is the same as this:\n",
        "      # result = tn.ncon([x, a_var, b_var], [[1, 2], [-1, 1, 3], [-2, 2, 3]])\n",
        "\n",
        "      # Finally, add bias.\n",
        "      return result + bias_var\n",
        "\n",
        "    # To deal with a batch of items, we can use the tf.vectorized_map\n",
        "    # function.\n",
        "    # https://www.tensorflow.org/api_docs/python/tf/vectorized_map\n",
        "    result = tf.vectorized_map(\n",
        "        lambda vec: f(vec, self.a_var, self.b_var, self.bias), inputs)\n",
        "    return tf.nn.relu(tf.reshape(result, (-1, 1024)))"
      ],
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "V-CVqIhPnhY_"
      },
      "source": [
        "# Smaller model\n",
        "These two models are effectively the same, but notice how the TN layer has nearly 10x fewer parameters."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XPBvnB95jg4b",
        "outputId": "f2641800-a116-4aac-9940-bf4a5479573b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        }
      },
      "source": [
        "Dense = tf.keras.layers.Dense\n",
        "fc_model = tf.keras.Sequential(\n",
        "    [\n",
        "     tf.keras.Input(shape=(2,)),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     Dense(1, activation=None)])\n",
        "fc_model.summary()"
      ],
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model: \"sequential_2\"\n",
            "_________________________________________________________________\n",
            " Layer (type)                Output Shape              Param #   \n",
            "=================================================================\n",
            " dense_4 (Dense)             (None, 1024)              3072      \n",
            "                                                                 \n",
            " dense_5 (Dense)             (None, 1)                 1025      \n",
            "                                                                 \n",
            "=================================================================\n",
            "Total params: 4097 (16.00 KB)\n",
            "Trainable params: 4097 (16.00 KB)\n",
            "Non-trainable params: 0 (0.00 Byte)\n",
            "_________________________________________________________________\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bbKsmK8wIFTp",
        "outputId": "60e2c6f0-a97b-44f9-b147-ed5e610dbc8b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        }
      },
      "source": [
        "tn_model = tf.keras.Sequential(\n",
        "    [\n",
        "     tf.keras.Input(shape=(2,)),\n",
        "     Dense(1024, activation=tf.nn.relu),\n",
        "     # Here, we replace the dense layer with our MPS.\n",
        "     TNLayer(),\n",
        "     TNLayer(),\n",
        "     TNLayer(),\n",
        "     Dense(1, activation=None)])\n",
        "tn_model.summary()"
      ],
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model: \"sequential_3\"\n",
            "_________________________________________________________________\n",
            " Layer (type)                Output Shape              Param #   \n",
            "=================================================================\n",
            " dense_6 (Dense)             (None, 1024)              3072      \n",
            "                                                                 \n",
            " tn_layer_3 (TNLayer)        (None, 1024)              5120      \n",
            "                                                                 \n",
            " tn_layer_4 (TNLayer)        (None, 1024)              5120      \n",
            "                                                                 \n",
            " tn_layer_5 (TNLayer)        (None, 1024)              5120      \n",
            "                                                                 \n",
            " dense_7 (Dense)             (None, 1)                 1025      \n",
            "                                                                 \n",
            "=================================================================\n",
            "Total params: 19457 (76.00 KB)\n",
            "Trainable params: 19457 (76.00 KB)\n",
            "Non-trainable params: 0 (0.00 Byte)\n",
            "_________________________________________________________________\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GWwoYp0WnsLA"
      },
      "source": [
        "# Training a model\n",
        "\n",
        "You can train the TN model just as you would a normal neural network model! Here, we give an example of how to do it in Keras."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qDFzOC7sDBJ-"
      },
      "source": [
        "X = np.concatenate([np.random.randn(20, 2) + np.array([3, 3]),\n",
        "                    np.random.randn(20, 2) + np.array([-3, -3]),\n",
        "                    np.random.randn(20, 2) + np.array([-3, 3]),\n",
        "                    np.random.randn(20, 2) + np.array([3, -3])])\n",
        "\n",
        "Y = np.concatenate([np.ones((40)), -np.ones((40))])"
      ],
      "execution_count": 18,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since beginning of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "19TWP-1eKURB",
        "outputId": "88f88518-6adf-457a-ca0f-6c7086f4ae3e"
      },
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since beginning of run: 1710188229.5891027\n",
            "Mon Mar 11 20:17:09 2024\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "crc0q1vbIyTj",
        "outputId": "add9ace6-970a-47b5-92af-7a38dc5a1531",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        }
      },
      "source": [
        "tn_model.compile(optimizer=\"adam\", loss=\"mean_squared_error\")\n",
        "tn_model.fit(X, Y, epochs=300, verbose=2)"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/300\n",
            "3/3 - 2s - loss: 1.0024 - 2s/epoch - 565ms/step\n",
            "Epoch 2/300\n",
            "3/3 - 0s - loss: 1.0018 - 19ms/epoch - 6ms/step\n",
            "Epoch 3/300\n",
            "3/3 - 0s - loss: 1.0006 - 20ms/epoch - 7ms/step\n",
            "Epoch 4/300\n",
            "3/3 - 0s - loss: 1.0001 - 21ms/epoch - 7ms/step\n",
            "Epoch 5/300\n",
            "3/3 - 0s - loss: 1.0005 - 19ms/epoch - 6ms/step\n",
            "Epoch 6/300\n",
            "3/3 - 0s - loss: 0.9998 - 19ms/epoch - 6ms/step\n",
            "Epoch 7/300\n",
            "3/3 - 0s - loss: 0.9994 - 17ms/epoch - 6ms/step\n",
            "Epoch 8/300\n",
            "3/3 - 0s - loss: 0.9986 - 18ms/epoch - 6ms/step\n",
            "Epoch 9/300\n",
            "3/3 - 0s - loss: 0.9965 - 19ms/epoch - 6ms/step\n",
            "Epoch 10/300\n",
            "3/3 - 0s - loss: 0.9921 - 20ms/epoch - 7ms/step\n",
            "Epoch 11/300\n",
            "3/3 - 0s - loss: 0.9821 - 20ms/epoch - 7ms/step\n",
            "Epoch 12/300\n",
            "3/3 - 0s - loss: 0.9612 - 19ms/epoch - 6ms/step\n",
            "Epoch 13/300\n",
            "3/3 - 0s - loss: 0.9221 - 19ms/epoch - 6ms/step\n",
            "Epoch 14/300\n",
            "3/3 - 0s - loss: 0.8484 - 19ms/epoch - 6ms/step\n",
            "Epoch 15/300\n",
            "3/3 - 0s - loss: 0.7159 - 18ms/epoch - 6ms/step\n",
            "Epoch 16/300\n",
            "3/3 - 0s - loss: 0.4901 - 19ms/epoch - 6ms/step\n",
            "Epoch 17/300\n",
            "3/3 - 0s - loss: 0.2051 - 17ms/epoch - 6ms/step\n",
            "Epoch 18/300\n",
            "3/3 - 0s - loss: 0.0695 - 18ms/epoch - 6ms/step\n",
            "Epoch 19/300\n",
            "3/3 - 0s - loss: 0.1195 - 18ms/epoch - 6ms/step\n",
            "Epoch 20/300\n",
            "3/3 - 0s - loss: 0.0458 - 19ms/epoch - 6ms/step\n",
            "Epoch 21/300\n",
            "3/3 - 0s - loss: 0.0341 - 21ms/epoch - 7ms/step\n",
            "Epoch 22/300\n",
            "3/3 - 0s - loss: 0.0483 - 18ms/epoch - 6ms/step\n",
            "Epoch 23/300\n",
            "3/3 - 0s - loss: 0.0376 - 20ms/epoch - 7ms/step\n",
            "Epoch 24/300\n",
            "3/3 - 0s - loss: 0.0180 - 18ms/epoch - 6ms/step\n",
            "Epoch 25/300\n",
            "3/3 - 0s - loss: 0.0137 - 18ms/epoch - 6ms/step\n",
            "Epoch 26/300\n",
            "3/3 - 0s - loss: 0.0172 - 17ms/epoch - 6ms/step\n",
            "Epoch 27/300\n",
            "3/3 - 0s - loss: 0.0143 - 19ms/epoch - 6ms/step\n",
            "Epoch 28/300\n",
            "3/3 - 0s - loss: 0.0103 - 16ms/epoch - 5ms/step\n",
            "Epoch 29/300\n",
            "3/3 - 0s - loss: 0.0099 - 19ms/epoch - 6ms/step\n",
            "Epoch 30/300\n",
            "3/3 - 0s - loss: 0.0107 - 18ms/epoch - 6ms/step\n",
            "Epoch 31/300\n",
            "3/3 - 0s - loss: 0.0090 - 17ms/epoch - 6ms/step\n",
            "Epoch 32/300\n",
            "3/3 - 0s - loss: 0.0074 - 20ms/epoch - 7ms/step\n",
            "Epoch 33/300\n",
            "3/3 - 0s - loss: 0.0073 - 19ms/epoch - 6ms/step\n",
            "Epoch 34/300\n",
            "3/3 - 0s - loss: 0.0073 - 19ms/epoch - 6ms/step\n",
            "Epoch 35/300\n",
            "3/3 - 0s - loss: 0.0065 - 19ms/epoch - 6ms/step\n",
            "Epoch 36/300\n",
            "3/3 - 0s - loss: 0.0060 - 19ms/epoch - 6ms/step\n",
            "Epoch 37/300\n",
            "3/3 - 0s - loss: 0.0059 - 21ms/epoch - 7ms/step\n",
            "Epoch 38/300\n",
            "3/3 - 0s - loss: 0.0057 - 18ms/epoch - 6ms/step\n",
            "Epoch 39/300\n",
            "3/3 - 0s - loss: 0.0053 - 18ms/epoch - 6ms/step\n",
            "Epoch 40/300\n",
            "3/3 - 0s - loss: 0.0051 - 18ms/epoch - 6ms/step\n",
            "Epoch 41/300\n",
            "3/3 - 0s - loss: 0.0049 - 20ms/epoch - 7ms/step\n",
            "Epoch 42/300\n",
            "3/3 - 0s - loss: 0.0047 - 19ms/epoch - 6ms/step\n",
            "Epoch 43/300\n",
            "3/3 - 0s - loss: 0.0045 - 17ms/epoch - 6ms/step\n",
            "Epoch 44/300\n",
            "3/3 - 0s - loss: 0.0044 - 18ms/epoch - 6ms/step\n",
            "Epoch 45/300\n",
            "3/3 - 0s - loss: 0.0042 - 19ms/epoch - 6ms/step\n",
            "Epoch 46/300\n",
            "3/3 - 0s - loss: 0.0040 - 18ms/epoch - 6ms/step\n",
            "Epoch 47/300\n",
            "3/3 - 0s - loss: 0.0040 - 20ms/epoch - 7ms/step\n",
            "Epoch 48/300\n",
            "3/3 - 0s - loss: 0.0039 - 20ms/epoch - 7ms/step\n",
            "Epoch 49/300\n",
            "3/3 - 0s - loss: 0.0037 - 20ms/epoch - 7ms/step\n",
            "Epoch 50/300\n",
            "3/3 - 0s - loss: 0.0035 - 19ms/epoch - 6ms/step\n",
            "Epoch 51/300\n",
            "3/3 - 0s - loss: 0.0034 - 17ms/epoch - 6ms/step\n",
            "Epoch 52/300\n",
            "3/3 - 0s - loss: 0.0033 - 19ms/epoch - 6ms/step\n",
            "Epoch 53/300\n",
            "3/3 - 0s - loss: 0.0032 - 18ms/epoch - 6ms/step\n",
            "Epoch 54/300\n",
            "3/3 - 0s - loss: 0.0031 - 19ms/epoch - 6ms/step\n",
            "Epoch 55/300\n",
            "3/3 - 0s - loss: 0.0030 - 17ms/epoch - 6ms/step\n",
            "Epoch 56/300\n",
            "3/3 - 0s - loss: 0.0030 - 19ms/epoch - 6ms/step\n",
            "Epoch 57/300\n",
            "3/3 - 0s - loss: 0.0028 - 20ms/epoch - 7ms/step\n",
            "Epoch 58/300\n",
            "3/3 - 0s - loss: 0.0027 - 19ms/epoch - 6ms/step\n",
            "Epoch 59/300\n",
            "3/3 - 0s - loss: 0.0027 - 17ms/epoch - 6ms/step\n",
            "Epoch 60/300\n",
            "3/3 - 0s - loss: 0.0026 - 17ms/epoch - 6ms/step\n",
            "Epoch 61/300\n",
            "3/3 - 0s - loss: 0.0025 - 19ms/epoch - 6ms/step\n",
            "Epoch 62/300\n",
            "3/3 - 0s - loss: 0.0024 - 19ms/epoch - 6ms/step\n",
            "Epoch 63/300\n",
            "3/3 - 0s - loss: 0.0023 - 17ms/epoch - 6ms/step\n",
            "Epoch 64/300\n",
            "3/3 - 0s - loss: 0.0022 - 18ms/epoch - 6ms/step\n",
            "Epoch 65/300\n",
            "3/3 - 0s - loss: 0.0021 - 19ms/epoch - 6ms/step\n",
            "Epoch 66/300\n",
            "3/3 - 0s - loss: 0.0021 - 20ms/epoch - 7ms/step\n",
            "Epoch 67/300\n",
            "3/3 - 0s - loss: 0.0020 - 17ms/epoch - 6ms/step\n",
            "Epoch 68/300\n",
            "3/3 - 0s - loss: 0.0019 - 19ms/epoch - 6ms/step\n",
            "Epoch 69/300\n",
            "3/3 - 0s - loss: 0.0019 - 19ms/epoch - 6ms/step\n",
            "Epoch 70/300\n",
            "3/3 - 0s - loss: 0.0018 - 19ms/epoch - 6ms/step\n",
            "Epoch 71/300\n",
            "3/3 - 0s - loss: 0.0017 - 17ms/epoch - 6ms/step\n",
            "Epoch 72/300\n",
            "3/3 - 0s - loss: 0.0016 - 19ms/epoch - 6ms/step\n",
            "Epoch 73/300\n",
            "3/3 - 0s - loss: 0.0015 - 20ms/epoch - 7ms/step\n",
            "Epoch 74/300\n",
            "3/3 - 0s - loss: 0.0015 - 21ms/epoch - 7ms/step\n",
            "Epoch 75/300\n",
            "3/3 - 0s - loss: 0.0014 - 18ms/epoch - 6ms/step\n",
            "Epoch 76/300\n",
            "3/3 - 0s - loss: 0.0014 - 18ms/epoch - 6ms/step\n",
            "Epoch 77/300\n",
            "3/3 - 0s - loss: 0.0013 - 18ms/epoch - 6ms/step\n",
            "Epoch 78/300\n",
            "3/3 - 0s - loss: 0.0012 - 17ms/epoch - 6ms/step\n",
            "Epoch 79/300\n",
            "3/3 - 0s - loss: 0.0012 - 18ms/epoch - 6ms/step\n",
            "Epoch 80/300\n",
            "3/3 - 0s - loss: 0.0011 - 17ms/epoch - 6ms/step\n",
            "Epoch 81/300\n",
            "3/3 - 0s - loss: 0.0011 - 17ms/epoch - 6ms/step\n",
            "Epoch 82/300\n",
            "3/3 - 0s - loss: 0.0010 - 16ms/epoch - 5ms/step\n",
            "Epoch 83/300\n",
            "3/3 - 0s - loss: 9.8321e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 84/300\n",
            "3/3 - 0s - loss: 9.2017e-04 - 16ms/epoch - 5ms/step\n",
            "Epoch 85/300\n",
            "3/3 - 0s - loss: 8.8245e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 86/300\n",
            "3/3 - 0s - loss: 8.3810e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 87/300\n",
            "3/3 - 0s - loss: 7.8096e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 88/300\n",
            "3/3 - 0s - loss: 7.3715e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 89/300\n",
            "3/3 - 0s - loss: 7.1357e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 90/300\n",
            "3/3 - 0s - loss: 6.5573e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 91/300\n",
            "3/3 - 0s - loss: 6.1921e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 92/300\n",
            "3/3 - 0s - loss: 5.8164e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 93/300\n",
            "3/3 - 0s - loss: 5.3437e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 94/300\n",
            "3/3 - 0s - loss: 5.0392e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 95/300\n",
            "3/3 - 0s - loss: 4.7432e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 96/300\n",
            "3/3 - 0s - loss: 4.4874e-04 - 17ms/epoch - 6ms/step\n",
            "Epoch 97/300\n",
            "3/3 - 0s - loss: 4.0825e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 98/300\n",
            "3/3 - 0s - loss: 3.9622e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 99/300\n",
            "3/3 - 0s - loss: 3.5760e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 100/300\n",
            "3/3 - 0s - loss: 3.4462e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 101/300\n",
            "3/3 - 0s - loss: 3.0879e-04 - 17ms/epoch - 6ms/step\n",
            "Epoch 102/300\n",
            "3/3 - 0s - loss: 2.9092e-04 - 20ms/epoch - 7ms/step\n",
            "Epoch 103/300\n",
            "3/3 - 0s - loss: 2.7175e-04 - 17ms/epoch - 6ms/step\n",
            "Epoch 104/300\n",
            "3/3 - 0s - loss: 2.4185e-04 - 15ms/epoch - 5ms/step\n",
            "Epoch 105/300\n",
            "3/3 - 0s - loss: 2.3357e-04 - 16ms/epoch - 5ms/step\n",
            "Epoch 106/300\n",
            "3/3 - 0s - loss: 2.1750e-04 - 16ms/epoch - 5ms/step\n",
            "Epoch 107/300\n",
            "3/3 - 0s - loss: 1.9292e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 108/300\n",
            "3/3 - 0s - loss: 1.7528e-04 - 17ms/epoch - 6ms/step\n",
            "Epoch 109/300\n",
            "3/3 - 0s - loss: 1.7045e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 110/300\n",
            "3/3 - 0s - loss: 1.4298e-04 - 17ms/epoch - 6ms/step\n",
            "Epoch 111/300\n",
            "3/3 - 0s - loss: 1.3799e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 112/300\n",
            "3/3 - 0s - loss: 1.3130e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 113/300\n",
            "3/3 - 0s - loss: 1.0617e-04 - 19ms/epoch - 6ms/step\n",
            "Epoch 114/300\n",
            "3/3 - 0s - loss: 1.0599e-04 - 16ms/epoch - 5ms/step\n",
            "Epoch 115/300\n",
            "3/3 - 0s - loss: 1.0250e-04 - 18ms/epoch - 6ms/step\n",
            "Epoch 116/300\n",
            "3/3 - 0s - loss: 8.4747e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 117/300\n",
            "3/3 - 0s - loss: 7.4575e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 118/300\n",
            "3/3 - 0s - loss: 6.7613e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 119/300\n",
            "3/3 - 0s - loss: 6.1106e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 120/300\n",
            "3/3 - 0s - loss: 5.4595e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 121/300\n",
            "3/3 - 0s - loss: 5.1554e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 122/300\n",
            "3/3 - 0s - loss: 4.3218e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 123/300\n",
            "3/3 - 0s - loss: 4.0797e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 124/300\n",
            "3/3 - 0s - loss: 4.0885e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 125/300\n",
            "3/3 - 0s - loss: 3.2498e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 126/300\n",
            "3/3 - 0s - loss: 2.9730e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 127/300\n",
            "3/3 - 0s - loss: 2.6138e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 128/300\n",
            "3/3 - 0s - loss: 2.2820e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 129/300\n",
            "3/3 - 0s - loss: 2.0466e-05 - 21ms/epoch - 7ms/step\n",
            "Epoch 130/300\n",
            "3/3 - 0s - loss: 1.8136e-05 - 20ms/epoch - 7ms/step\n",
            "Epoch 131/300\n",
            "3/3 - 0s - loss: 1.7283e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 132/300\n",
            "3/3 - 0s - loss: 1.4675e-05 - 18ms/epoch - 6ms/step\n",
            "Epoch 133/300\n",
            "3/3 - 0s - loss: 1.3378e-05 - 19ms/epoch - 6ms/step\n",
            "Epoch 134/300\n",
            "3/3 - 0s - loss: 1.1999e-05 - 16ms/epoch - 5ms/step\n",
            "Epoch 135/300\n",
            "3/3 - 0s - loss: 1.0626e-05 - 17ms/epoch - 6ms/step\n",
            "Epoch 136/300\n",
            "3/3 - 0s - loss: 9.8831e-06 - 16ms/epoch - 5ms/step\n",
            "Epoch 137/300\n",
            "3/3 - 0s - loss: 8.9648e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 138/300\n",
            "3/3 - 0s - loss: 8.3134e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 139/300\n",
            "3/3 - 0s - loss: 7.6046e-06 - 16ms/epoch - 5ms/step\n",
            "Epoch 140/300\n",
            "3/3 - 0s - loss: 7.2211e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 141/300\n",
            "3/3 - 0s - loss: 6.1951e-06 - 16ms/epoch - 5ms/step\n",
            "Epoch 142/300\n",
            "3/3 - 0s - loss: 5.7709e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 143/300\n",
            "3/3 - 0s - loss: 5.5310e-06 - 16ms/epoch - 5ms/step\n",
            "Epoch 144/300\n",
            "3/3 - 0s - loss: 5.0392e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 145/300\n",
            "3/3 - 0s - loss: 4.6740e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 146/300\n",
            "3/3 - 0s - loss: 4.7119e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 147/300\n",
            "3/3 - 0s - loss: 4.3232e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 148/300\n",
            "3/3 - 0s - loss: 3.8607e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 149/300\n",
            "3/3 - 0s - loss: 4.3069e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 150/300\n",
            "3/3 - 0s - loss: 3.4503e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 151/300\n",
            "3/3 - 0s - loss: 3.9304e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 152/300\n",
            "3/3 - 0s - loss: 3.2344e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 153/300\n",
            "3/3 - 0s - loss: 3.0338e-06 - 16ms/epoch - 5ms/step\n",
            "Epoch 154/300\n",
            "3/3 - 0s - loss: 2.9454e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 155/300\n",
            "3/3 - 0s - loss: 2.8282e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 156/300\n",
            "3/3 - 0s - loss: 2.7397e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 157/300\n",
            "3/3 - 0s - loss: 2.6740e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 158/300\n",
            "3/3 - 0s - loss: 2.7716e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 159/300\n",
            "3/3 - 0s - loss: 2.6493e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 160/300\n",
            "3/3 - 0s - loss: 2.5205e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 161/300\n",
            "3/3 - 0s - loss: 2.5773e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 162/300\n",
            "3/3 - 0s - loss: 2.3652e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 163/300\n",
            "3/3 - 0s - loss: 2.3304e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 164/300\n",
            "3/3 - 0s - loss: 2.3572e-06 - 21ms/epoch - 7ms/step\n",
            "Epoch 165/300\n",
            "3/3 - 0s - loss: 2.3138e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 166/300\n",
            "3/3 - 0s - loss: 2.1769e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 167/300\n",
            "3/3 - 0s - loss: 2.2163e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 168/300\n",
            "3/3 - 0s - loss: 2.2622e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 169/300\n",
            "3/3 - 0s - loss: 2.0221e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 170/300\n",
            "3/3 - 0s - loss: 1.9665e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 171/300\n",
            "3/3 - 0s - loss: 2.0274e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 172/300\n",
            "3/3 - 0s - loss: 1.8767e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 173/300\n",
            "3/3 - 0s - loss: 1.8783e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 174/300\n",
            "3/3 - 0s - loss: 1.7939e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 175/300\n",
            "3/3 - 0s - loss: 1.8308e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 176/300\n",
            "3/3 - 0s - loss: 1.7122e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 177/300\n",
            "3/3 - 0s - loss: 1.7953e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 178/300\n",
            "3/3 - 0s - loss: 1.8791e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 179/300\n",
            "3/3 - 0s - loss: 1.6734e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 180/300\n",
            "3/3 - 0s - loss: 1.8119e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 181/300\n",
            "3/3 - 0s - loss: 1.6506e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 182/300\n",
            "3/3 - 0s - loss: 1.6008e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 183/300\n",
            "3/3 - 0s - loss: 1.6617e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 184/300\n",
            "3/3 - 0s - loss: 1.6928e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 185/300\n",
            "3/3 - 0s - loss: 1.6553e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 186/300\n",
            "3/3 - 0s - loss: 1.5491e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 187/300\n",
            "3/3 - 0s - loss: 1.5482e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 188/300\n",
            "3/3 - 0s - loss: 1.4593e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 189/300\n",
            "3/3 - 0s - loss: 1.4255e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 190/300\n",
            "3/3 - 0s - loss: 1.3986e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 191/300\n",
            "3/3 - 0s - loss: 1.5424e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 192/300\n",
            "3/3 - 0s - loss: 1.2626e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 193/300\n",
            "3/3 - 0s - loss: 1.5656e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 194/300\n",
            "3/3 - 0s - loss: 1.2606e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 195/300\n",
            "3/3 - 0s - loss: 1.3207e-06 - 14ms/epoch - 5ms/step\n",
            "Epoch 196/300\n",
            "3/3 - 0s - loss: 1.2053e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 197/300\n",
            "3/3 - 0s - loss: 1.2636e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 198/300\n",
            "3/3 - 0s - loss: 1.3895e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 199/300\n",
            "3/3 - 0s - loss: 1.7720e-06 - 20ms/epoch - 7ms/step\n",
            "Epoch 200/300\n",
            "3/3 - 0s - loss: 1.4712e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 201/300\n",
            "3/3 - 0s - loss: 1.2852e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 202/300\n",
            "3/3 - 0s - loss: 1.2201e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 203/300\n",
            "3/3 - 0s - loss: 1.2315e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 204/300\n",
            "3/3 - 0s - loss: 1.2137e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 205/300\n",
            "3/3 - 0s - loss: 1.1464e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 206/300\n",
            "3/3 - 0s - loss: 1.1378e-06 - 19ms/epoch - 6ms/step\n",
            "Epoch 207/300\n",
            "3/3 - 0s - loss: 1.1326e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 208/300\n",
            "3/3 - 0s - loss: 1.0244e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 209/300\n",
            "3/3 - 0s - loss: 1.0267e-06 - 16ms/epoch - 5ms/step\n",
            "Epoch 210/300\n",
            "3/3 - 0s - loss: 1.0357e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 211/300\n",
            "3/3 - 0s - loss: 9.7737e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 212/300\n",
            "3/3 - 0s - loss: 1.0423e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 213/300\n",
            "3/3 - 0s - loss: 9.8448e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 214/300\n",
            "3/3 - 0s - loss: 1.0018e-06 - 17ms/epoch - 6ms/step\n",
            "Epoch 215/300\n",
            "3/3 - 0s - loss: 9.1200e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 216/300\n",
            "3/3 - 0s - loss: 1.0102e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 217/300\n",
            "3/3 - 0s - loss: 9.3246e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 218/300\n",
            "3/3 - 0s - loss: 9.5379e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 219/300\n",
            "3/3 - 0s - loss: 8.4808e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 220/300\n",
            "3/3 - 0s - loss: 9.7903e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 221/300\n",
            "3/3 - 0s - loss: 8.7227e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 222/300\n",
            "3/3 - 0s - loss: 9.7763e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 223/300\n",
            "3/3 - 0s - loss: 8.8895e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 224/300\n",
            "3/3 - 0s - loss: 8.4058e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 225/300\n",
            "3/3 - 0s - loss: 8.4322e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 226/300\n",
            "3/3 - 0s - loss: 8.2272e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 227/300\n",
            "3/3 - 0s - loss: 1.0062e-06 - 18ms/epoch - 6ms/step\n",
            "Epoch 228/300\n",
            "3/3 - 0s - loss: 9.7675e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 229/300\n",
            "3/3 - 0s - loss: 8.7218e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 230/300\n",
            "3/3 - 0s - loss: 7.8812e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 231/300\n",
            "3/3 - 0s - loss: 9.1749e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 232/300\n",
            "3/3 - 0s - loss: 7.9618e-07 - 22ms/epoch - 7ms/step\n",
            "Epoch 233/300\n",
            "3/3 - 0s - loss: 7.5737e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 234/300\n",
            "3/3 - 0s - loss: 7.6260e-07 - 20ms/epoch - 7ms/step\n",
            "Epoch 235/300\n",
            "3/3 - 0s - loss: 7.2413e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 236/300\n",
            "3/3 - 0s - loss: 7.7676e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 237/300\n",
            "3/3 - 0s - loss: 8.6850e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 238/300\n",
            "3/3 - 0s - loss: 6.9834e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 239/300\n",
            "3/3 - 0s - loss: 7.8306e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 240/300\n",
            "3/3 - 0s - loss: 7.8248e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 241/300\n",
            "3/3 - 0s - loss: 7.6579e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 242/300\n",
            "3/3 - 0s - loss: 7.5519e-07 - 20ms/epoch - 7ms/step\n",
            "Epoch 243/300\n",
            "3/3 - 0s - loss: 7.3483e-07 - 21ms/epoch - 7ms/step\n",
            "Epoch 244/300\n",
            "3/3 - 0s - loss: 7.4427e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 245/300\n",
            "3/3 - 0s - loss: 7.7773e-07 - 15ms/epoch - 5ms/step\n",
            "Epoch 246/300\n",
            "3/3 - 0s - loss: 6.8817e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 247/300\n",
            "3/3 - 0s - loss: 6.5189e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 248/300\n",
            "3/3 - 0s - loss: 6.8363e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 249/300\n",
            "3/3 - 0s - loss: 6.1399e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 250/300\n",
            "3/3 - 0s - loss: 6.1084e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 251/300\n",
            "3/3 - 0s - loss: 7.0045e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 252/300\n",
            "3/3 - 0s - loss: 5.8253e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 253/300\n",
            "3/3 - 0s - loss: 6.6859e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 254/300\n",
            "3/3 - 0s - loss: 5.8004e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 255/300\n",
            "3/3 - 0s - loss: 6.3267e-07 - 21ms/epoch - 7ms/step\n",
            "Epoch 256/300\n",
            "3/3 - 0s - loss: 6.5009e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 257/300\n",
            "3/3 - 0s - loss: 6.3469e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 258/300\n",
            "3/3 - 0s - loss: 6.3418e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 259/300\n",
            "3/3 - 0s - loss: 6.7714e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 260/300\n",
            "3/3 - 0s - loss: 5.8171e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 261/300\n",
            "3/3 - 0s - loss: 5.5298e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 262/300\n",
            "3/3 - 0s - loss: 5.2794e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 263/300\n",
            "3/3 - 0s - loss: 5.3600e-07 - 20ms/epoch - 7ms/step\n",
            "Epoch 264/300\n",
            "3/3 - 0s - loss: 5.7530e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 265/300\n",
            "3/3 - 0s - loss: 5.8262e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 266/300\n",
            "3/3 - 0s - loss: 5.0531e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 267/300\n",
            "3/3 - 0s - loss: 5.9452e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 268/300\n",
            "3/3 - 0s - loss: 5.9767e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 269/300\n",
            "3/3 - 0s - loss: 6.7011e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 270/300\n",
            "3/3 - 0s - loss: 4.9662e-07 - 20ms/epoch - 7ms/step\n",
            "Epoch 271/300\n",
            "3/3 - 0s - loss: 6.3740e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 272/300\n",
            "3/3 - 0s - loss: 8.0880e-07 - 20ms/epoch - 7ms/step\n",
            "Epoch 273/300\n",
            "3/3 - 0s - loss: 5.4458e-07 - 22ms/epoch - 7ms/step\n",
            "Epoch 274/300\n",
            "3/3 - 0s - loss: 6.3893e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 275/300\n",
            "3/3 - 0s - loss: 6.6079e-07 - 20ms/epoch - 7ms/step\n",
            "Epoch 276/300\n",
            "3/3 - 0s - loss: 6.0472e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 277/300\n",
            "3/3 - 0s - loss: 4.9338e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 278/300\n",
            "3/3 - 0s - loss: 4.8985e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 279/300\n",
            "3/3 - 0s - loss: 4.9660e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 280/300\n",
            "3/3 - 0s - loss: 4.7264e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 281/300\n",
            "3/3 - 0s - loss: 5.2349e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 282/300\n",
            "3/3 - 0s - loss: 4.6477e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 283/300\n",
            "3/3 - 0s - loss: 5.3811e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 284/300\n",
            "3/3 - 0s - loss: 4.5133e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 285/300\n",
            "3/3 - 0s - loss: 4.6780e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 286/300\n",
            "3/3 - 0s - loss: 4.6665e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 287/300\n",
            "3/3 - 0s - loss: 4.4359e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 288/300\n",
            "3/3 - 0s - loss: 4.5922e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 289/300\n",
            "3/3 - 0s - loss: 4.1899e-07 - 20ms/epoch - 7ms/step\n",
            "Epoch 290/300\n",
            "3/3 - 0s - loss: 4.0793e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 291/300\n",
            "3/3 - 0s - loss: 4.2467e-07 - 20ms/epoch - 7ms/step\n",
            "Epoch 292/300\n",
            "3/3 - 0s - loss: 4.1783e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 293/300\n",
            "3/3 - 0s - loss: 4.2385e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 294/300\n",
            "3/3 - 0s - loss: 4.2650e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 295/300\n",
            "3/3 - 0s - loss: 4.4434e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 296/300\n",
            "3/3 - 0s - loss: 4.4485e-07 - 19ms/epoch - 6ms/step\n",
            "Epoch 297/300\n",
            "3/3 - 0s - loss: 3.9558e-07 - 18ms/epoch - 6ms/step\n",
            "Epoch 298/300\n",
            "3/3 - 0s - loss: 4.5108e-07 - 16ms/epoch - 5ms/step\n",
            "Epoch 299/300\n",
            "3/3 - 0s - loss: 3.7485e-07 - 17ms/epoch - 6ms/step\n",
            "Epoch 300/300\n",
            "3/3 - 0s - loss: 3.7340e-07 - 18ms/epoch - 6ms/step\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<keras.src.callbacks.History at 0x788338680d90>"
            ]
          },
          "metadata": {},
          "execution_count": 20
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "n-aNP4n3sqG_",
        "outputId": "15f1f0ad-1cb8-4bbc-f39b-d76a9c0f1be5",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 442
        }
      },
      "source": [
        "# Plotting code, feel free to ignore.\n",
        "h = 1.0\n",
        "x_min, x_max = X[:, 0].min() - 5, X[:, 0].max() + 5\n",
        "y_min, y_max = X[:, 1].min() - 5, X[:, 1].max() + 5\n",
        "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n",
        "                     np.arange(y_min, y_max, h))\n",
        "\n",
        "# here \"model\" is your model's prediction (classification) function\n",
        "Z = tn_model.predict(np.c_[xx.ravel(), yy.ravel()])\n",
        "\n",
        "# Put the result into a color plot\n",
        "Z = Z.reshape(xx.shape)\n",
        "plt.contourf(xx, yy, Z)\n",
        "plt.axis('off')\n",
        "\n",
        "# Plot also the training points\n",
        "plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "14/14 [==============================] - 0s 4ms/step\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.collections.PathCollection at 0x7883397badd0>"
            ]
          },
          "metadata": {},
          "execution_count": 21
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since end of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "wfZCzuq9KY9b",
        "outputId": "8958310d-750b-4b38-d776-4fc9e1f56664"
      },
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since end of run: 1710188242.0304391\n",
            "Mon Mar 11 20:17:22 2024\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since beginning of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "Ft6S13x6KuEQ",
        "outputId": "e0c69615-7edd-4a33-d0b5-7e57304eb157"
      },
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since beginning of run: 1710188242.0380704\n",
            "Mon Mar 11 20:17:22 2024\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BMxSJo5gtOmQ"
      },
      "source": [
        "# VS Fully Connected"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NKQx7stYswzU",
        "outputId": "a079f7f4-0158-4b6e-b21e-018da8f50895",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 11384
        }
      },
      "source": [
        "fc_model.compile(optimizer=\"adam\", loss=\"mean_squared_error\")\n",
        "fc_model.fit(X, Y, epochs=300, verbose=2)\n",
        "# Plotting code, feel free to ignore.\n",
        "h = 1.0\n",
        "x_min, x_max = X[:, 0].min() - 5, X[:, 0].max() + 5\n",
        "y_min, y_max = X[:, 1].min() - 5, X[:, 1].max() + 5\n",
        "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n",
        "                     np.arange(y_min, y_max, h))\n",
        "\n",
        "# here \"model\" is your model's prediction (classification) function\n",
        "Z = fc_model.predict(np.c_[xx.ravel(), yy.ravel()])\n",
        "\n",
        "# Put the result into a color plot\n",
        "Z = Z.reshape(xx.shape)\n",
        "plt.contourf(xx, yy, Z)\n",
        "plt.axis('off')\n",
        "\n",
        "# Plot also the training points\n",
        "plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)"
      ],
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/300\n",
            "3/3 - 0s - loss: 0.9186 - 336ms/epoch - 112ms/step\n",
            "Epoch 2/300\n",
            "3/3 - 0s - loss: 0.5176 - 10ms/epoch - 3ms/step\n",
            "Epoch 3/300\n",
            "3/3 - 0s - loss: 0.2669 - 9ms/epoch - 3ms/step\n",
            "Epoch 4/300\n",
            "3/3 - 0s - loss: 0.1269 - 8ms/epoch - 3ms/step\n",
            "Epoch 5/300\n",
            "3/3 - 0s - loss: 0.0790 - 10ms/epoch - 3ms/step\n",
            "Epoch 6/300\n",
            "3/3 - 0s - loss: 0.0857 - 9ms/epoch - 3ms/step\n",
            "Epoch 7/300\n",
            "3/3 - 0s - loss: 0.1119 - 10ms/epoch - 3ms/step\n",
            "Epoch 8/300\n",
            "3/3 - 0s - loss: 0.1165 - 9ms/epoch - 3ms/step\n",
            "Epoch 9/300\n",
            "3/3 - 0s - loss: 0.1066 - 8ms/epoch - 3ms/step\n",
            "Epoch 10/300\n",
            "3/3 - 0s - loss: 0.0910 - 9ms/epoch - 3ms/step\n",
            "Epoch 11/300\n",
            "3/3 - 0s - loss: 0.0755 - 9ms/epoch - 3ms/step\n",
            "Epoch 12/300\n",
            "3/3 - 0s - loss: 0.0671 - 8ms/epoch - 3ms/step\n",
            "Epoch 13/300\n",
            "3/3 - 0s - loss: 0.0662 - 10ms/epoch - 3ms/step\n",
            "Epoch 14/300\n",
            "3/3 - 0s - loss: 0.0687 - 8ms/epoch - 3ms/step\n",
            "Epoch 15/300\n",
            "3/3 - 0s - loss: 0.0689 - 9ms/epoch - 3ms/step\n",
            "Epoch 16/300\n",
            "3/3 - 0s - loss: 0.0681 - 11ms/epoch - 4ms/step\n",
            "Epoch 17/300\n",
            "3/3 - 0s - loss: 0.0649 - 9ms/epoch - 3ms/step\n",
            "Epoch 18/300\n",
            "3/3 - 0s - loss: 0.0624 - 10ms/epoch - 3ms/step\n",
            "Epoch 19/300\n",
            "3/3 - 0s - loss: 0.0613 - 8ms/epoch - 3ms/step\n",
            "Epoch 20/300\n",
            "3/3 - 0s - loss: 0.0591 - 9ms/epoch - 3ms/step\n",
            "Epoch 21/300\n",
            "3/3 - 0s - loss: 0.0584 - 10ms/epoch - 3ms/step\n",
            "Epoch 22/300\n",
            "3/3 - 0s - loss: 0.0580 - 9ms/epoch - 3ms/step\n",
            "Epoch 23/300\n",
            "3/3 - 0s - loss: 0.0567 - 9ms/epoch - 3ms/step\n",
            "Epoch 24/300\n",
            "3/3 - 0s - loss: 0.0562 - 8ms/epoch - 3ms/step\n",
            "Epoch 25/300\n",
            "3/3 - 0s - loss: 0.0553 - 8ms/epoch - 3ms/step\n",
            "Epoch 26/300\n",
            "3/3 - 0s - loss: 0.0549 - 9ms/epoch - 3ms/step\n",
            "Epoch 27/300\n",
            "3/3 - 0s - loss: 0.0551 - 10ms/epoch - 3ms/step\n",
            "Epoch 28/300\n",
            "3/3 - 0s - loss: 0.0536 - 10ms/epoch - 3ms/step\n",
            "Epoch 29/300\n",
            "3/3 - 0s - loss: 0.0536 - 8ms/epoch - 3ms/step\n",
            "Epoch 30/300\n",
            "3/3 - 0s - loss: 0.0539 - 8ms/epoch - 3ms/step\n",
            "Epoch 31/300\n",
            "3/3 - 0s - loss: 0.0524 - 6ms/epoch - 2ms/step\n",
            "Epoch 32/300\n",
            "3/3 - 0s - loss: 0.0523 - 7ms/epoch - 2ms/step\n",
            "Epoch 33/300\n",
            "3/3 - 0s - loss: 0.0533 - 10ms/epoch - 3ms/step\n",
            "Epoch 34/300\n",
            "3/3 - 0s - loss: 0.0525 - 10ms/epoch - 3ms/step\n",
            "Epoch 35/300\n",
            "3/3 - 0s - loss: 0.0517 - 9ms/epoch - 3ms/step\n",
            "Epoch 36/300\n",
            "3/3 - 0s - loss: 0.0505 - 9ms/epoch - 3ms/step\n",
            "Epoch 37/300\n",
            "3/3 - 0s - loss: 0.0507 - 9ms/epoch - 3ms/step\n",
            "Epoch 38/300\n",
            "3/3 - 0s - loss: 0.0520 - 12ms/epoch - 4ms/step\n",
            "Epoch 39/300\n",
            "3/3 - 0s - loss: 0.0502 - 9ms/epoch - 3ms/step\n",
            "Epoch 40/300\n",
            "3/3 - 0s - loss: 0.0505 - 8ms/epoch - 3ms/step\n",
            "Epoch 41/300\n",
            "3/3 - 0s - loss: 0.0502 - 10ms/epoch - 3ms/step\n",
            "Epoch 42/300\n",
            "3/3 - 0s - loss: 0.0497 - 9ms/epoch - 3ms/step\n",
            "Epoch 43/300\n",
            "3/3 - 0s - loss: 0.0488 - 7ms/epoch - 2ms/step\n",
            "Epoch 44/300\n",
            "3/3 - 0s - loss: 0.0485 - 7ms/epoch - 2ms/step\n",
            "Epoch 45/300\n",
            "3/3 - 0s - loss: 0.0481 - 8ms/epoch - 3ms/step\n",
            "Epoch 46/300\n",
            "3/3 - 0s - loss: 0.0493 - 8ms/epoch - 3ms/step\n",
            "Epoch 47/300\n",
            "3/3 - 0s - loss: 0.0490 - 10ms/epoch - 3ms/step\n",
            "Epoch 48/300\n",
            "3/3 - 0s - loss: 0.0489 - 8ms/epoch - 3ms/step\n",
            "Epoch 49/300\n",
            "3/3 - 0s - loss: 0.0480 - 7ms/epoch - 2ms/step\n",
            "Epoch 50/300\n",
            "3/3 - 0s - loss: 0.0475 - 8ms/epoch - 3ms/step\n",
            "Epoch 51/300\n",
            "3/3 - 0s - loss: 0.0469 - 9ms/epoch - 3ms/step\n",
            "Epoch 52/300\n",
            "3/3 - 0s - loss: 0.0467 - 8ms/epoch - 3ms/step\n",
            "Epoch 53/300\n",
            "3/3 - 0s - loss: 0.0474 - 10ms/epoch - 3ms/step\n",
            "Epoch 54/300\n",
            "3/3 - 0s - loss: 0.0472 - 9ms/epoch - 3ms/step\n",
            "Epoch 55/300\n",
            "3/3 - 0s - loss: 0.0464 - 8ms/epoch - 3ms/step\n",
            "Epoch 56/300\n",
            "3/3 - 0s - loss: 0.0474 - 7ms/epoch - 2ms/step\n",
            "Epoch 57/300\n",
            "3/3 - 0s - loss: 0.0472 - 8ms/epoch - 3ms/step\n",
            "Epoch 58/300\n",
            "3/3 - 0s - loss: 0.0469 - 9ms/epoch - 3ms/step\n",
            "Epoch 59/300\n",
            "3/3 - 0s - loss: 0.0460 - 9ms/epoch - 3ms/step\n",
            "Epoch 60/300\n",
            "3/3 - 0s - loss: 0.0475 - 9ms/epoch - 3ms/step\n",
            "Epoch 61/300\n",
            "3/3 - 0s - loss: 0.0465 - 8ms/epoch - 3ms/step\n",
            "Epoch 62/300\n",
            "3/3 - 0s - loss: 0.0474 - 10ms/epoch - 3ms/step\n",
            "Epoch 63/300\n",
            "3/3 - 0s - loss: 0.0457 - 10ms/epoch - 3ms/step\n",
            "Epoch 64/300\n",
            "3/3 - 0s - loss: 0.0454 - 10ms/epoch - 3ms/step\n",
            "Epoch 65/300\n",
            "3/3 - 0s - loss: 0.0474 - 10ms/epoch - 3ms/step\n",
            "Epoch 66/300\n",
            "3/3 - 0s - loss: 0.0443 - 10ms/epoch - 3ms/step\n",
            "Epoch 67/300\n",
            "3/3 - 0s - loss: 0.0461 - 9ms/epoch - 3ms/step\n",
            "Epoch 68/300\n",
            "3/3 - 0s - loss: 0.0458 - 9ms/epoch - 3ms/step\n",
            "Epoch 69/300\n",
            "3/3 - 0s - loss: 0.0462 - 7ms/epoch - 2ms/step\n",
            "Epoch 70/300\n",
            "3/3 - 0s - loss: 0.0469 - 7ms/epoch - 2ms/step\n",
            "Epoch 71/300\n",
            "3/3 - 0s - loss: 0.0462 - 7ms/epoch - 2ms/step\n",
            "Epoch 72/300\n",
            "3/3 - 0s - loss: 0.0455 - 7ms/epoch - 2ms/step\n",
            "Epoch 73/300\n",
            "3/3 - 0s - loss: 0.0446 - 9ms/epoch - 3ms/step\n",
            "Epoch 74/300\n",
            "3/3 - 0s - loss: 0.0445 - 9ms/epoch - 3ms/step\n",
            "Epoch 75/300\n",
            "3/3 - 0s - loss: 0.0448 - 7ms/epoch - 2ms/step\n",
            "Epoch 76/300\n",
            "3/3 - 0s - loss: 0.0437 - 8ms/epoch - 3ms/step\n",
            "Epoch 77/300\n",
            "3/3 - 0s - loss: 0.0444 - 9ms/epoch - 3ms/step\n",
            "Epoch 78/300\n",
            "3/3 - 0s - loss: 0.0446 - 10ms/epoch - 3ms/step\n",
            "Epoch 79/300\n",
            "3/3 - 0s - loss: 0.0444 - 9ms/epoch - 3ms/step\n",
            "Epoch 80/300\n",
            "3/3 - 0s - loss: 0.0447 - 9ms/epoch - 3ms/step\n",
            "Epoch 81/300\n",
            "3/3 - 0s - loss: 0.0456 - 8ms/epoch - 3ms/step\n",
            "Epoch 82/300\n",
            "3/3 - 0s - loss: 0.0438 - 8ms/epoch - 3ms/step\n",
            "Epoch 83/300\n",
            "3/3 - 0s - loss: 0.0436 - 9ms/epoch - 3ms/step\n",
            "Epoch 84/300\n",
            "3/3 - 0s - loss: 0.0438 - 9ms/epoch - 3ms/step\n",
            "Epoch 85/300\n",
            "3/3 - 0s - loss: 0.0427 - 9ms/epoch - 3ms/step\n",
            "Epoch 86/300\n",
            "3/3 - 0s - loss: 0.0427 - 7ms/epoch - 2ms/step\n",
            "Epoch 87/300\n",
            "3/3 - 0s - loss: 0.0423 - 8ms/epoch - 3ms/step\n",
            "Epoch 88/300\n",
            "3/3 - 0s - loss: 0.0420 - 7ms/epoch - 2ms/step\n",
            "Epoch 89/300\n",
            "3/3 - 0s - loss: 0.0441 - 8ms/epoch - 3ms/step\n",
            "Epoch 90/300\n",
            "3/3 - 0s - loss: 0.0422 - 9ms/epoch - 3ms/step\n",
            "Epoch 91/300\n",
            "3/3 - 0s - loss: 0.0434 - 9ms/epoch - 3ms/step\n",
            "Epoch 92/300\n",
            "3/3 - 0s - loss: 0.0423 - 8ms/epoch - 3ms/step\n",
            "Epoch 93/300\n",
            "3/3 - 0s - loss: 0.0420 - 8ms/epoch - 3ms/step\n",
            "Epoch 94/300\n",
            "3/3 - 0s - loss: 0.0418 - 8ms/epoch - 3ms/step\n",
            "Epoch 95/300\n",
            "3/3 - 0s - loss: 0.0434 - 7ms/epoch - 2ms/step\n",
            "Epoch 96/300\n",
            "3/3 - 0s - loss: 0.0447 - 10ms/epoch - 3ms/step\n",
            "Epoch 97/300\n",
            "3/3 - 0s - loss: 0.0418 - 10ms/epoch - 3ms/step\n",
            "Epoch 98/300\n",
            "3/3 - 0s - loss: 0.0453 - 9ms/epoch - 3ms/step\n",
            "Epoch 99/300\n",
            "3/3 - 0s - loss: 0.0431 - 11ms/epoch - 4ms/step\n",
            "Epoch 100/300\n",
            "3/3 - 0s - loss: 0.0416 - 11ms/epoch - 4ms/step\n",
            "Epoch 101/300\n",
            "3/3 - 0s - loss: 0.0420 - 9ms/epoch - 3ms/step\n",
            "Epoch 102/300\n",
            "3/3 - 0s - loss: 0.0416 - 7ms/epoch - 2ms/step\n",
            "Epoch 103/300\n",
            "3/3 - 0s - loss: 0.0411 - 6ms/epoch - 2ms/step\n",
            "Epoch 104/300\n",
            "3/3 - 0s - loss: 0.0403 - 8ms/epoch - 3ms/step\n",
            "Epoch 105/300\n",
            "3/3 - 0s - loss: 0.0411 - 9ms/epoch - 3ms/step\n",
            "Epoch 106/300\n",
            "3/3 - 0s - loss: 0.0421 - 9ms/epoch - 3ms/step\n",
            "Epoch 107/300\n",
            "3/3 - 0s - loss: 0.0405 - 9ms/epoch - 3ms/step\n",
            "Epoch 108/300\n",
            "3/3 - 0s - loss: 0.0408 - 8ms/epoch - 3ms/step\n",
            "Epoch 109/300\n",
            "3/3 - 0s - loss: 0.0400 - 10ms/epoch - 3ms/step\n",
            "Epoch 110/300\n",
            "3/3 - 0s - loss: 0.0400 - 10ms/epoch - 3ms/step\n",
            "Epoch 111/300\n",
            "3/3 - 0s - loss: 0.0394 - 8ms/epoch - 3ms/step\n",
            "Epoch 112/300\n",
            "3/3 - 0s - loss: 0.0413 - 10ms/epoch - 3ms/step\n",
            "Epoch 113/300\n",
            "3/3 - 0s - loss: 0.0408 - 9ms/epoch - 3ms/step\n",
            "Epoch 114/300\n",
            "3/3 - 0s - loss: 0.0394 - 9ms/epoch - 3ms/step\n",
            "Epoch 115/300\n",
            "3/3 - 0s - loss: 0.0394 - 8ms/epoch - 3ms/step\n",
            "Epoch 116/300\n",
            "3/3 - 0s - loss: 0.0395 - 9ms/epoch - 3ms/step\n",
            "Epoch 117/300\n",
            "3/3 - 0s - loss: 0.0406 - 8ms/epoch - 3ms/step\n",
            "Epoch 118/300\n",
            "3/3 - 0s - loss: 0.0394 - 8ms/epoch - 3ms/step\n",
            "Epoch 119/300\n",
            "3/3 - 0s - loss: 0.0403 - 9ms/epoch - 3ms/step\n",
            "Epoch 120/300\n",
            "3/3 - 0s - loss: 0.0389 - 9ms/epoch - 3ms/step\n",
            "Epoch 121/300\n",
            "3/3 - 0s - loss: 0.0390 - 9ms/epoch - 3ms/step\n",
            "Epoch 122/300\n",
            "3/3 - 0s - loss: 0.0404 - 7ms/epoch - 2ms/step\n",
            "Epoch 123/300\n",
            "3/3 - 0s - loss: 0.0383 - 10ms/epoch - 3ms/step\n",
            "Epoch 124/300\n",
            "3/3 - 0s - loss: 0.0387 - 7ms/epoch - 2ms/step\n",
            "Epoch 125/300\n",
            "3/3 - 0s - loss: 0.0394 - 7ms/epoch - 2ms/step\n",
            "Epoch 126/300\n",
            "3/3 - 0s - loss: 0.0388 - 6ms/epoch - 2ms/step\n",
            "Epoch 127/300\n",
            "3/3 - 0s - loss: 0.0376 - 8ms/epoch - 3ms/step\n",
            "Epoch 128/300\n",
            "3/3 - 0s - loss: 0.0368 - 7ms/epoch - 2ms/step\n",
            "Epoch 129/300\n",
            "3/3 - 0s - loss: 0.0365 - 8ms/epoch - 3ms/step\n",
            "Epoch 130/300\n",
            "3/3 - 0s - loss: 0.0367 - 8ms/epoch - 3ms/step\n",
            "Epoch 131/300\n",
            "3/3 - 0s - loss: 0.0370 - 7ms/epoch - 2ms/step\n",
            "Epoch 132/300\n",
            "3/3 - 0s - loss: 0.0367 - 9ms/epoch - 3ms/step\n",
            "Epoch 133/300\n",
            "3/3 - 0s - loss: 0.0372 - 10ms/epoch - 3ms/step\n",
            "Epoch 134/300\n",
            "3/3 - 0s - loss: 0.0366 - 9ms/epoch - 3ms/step\n",
            "Epoch 135/300\n",
            "3/3 - 0s - loss: 0.0360 - 8ms/epoch - 3ms/step\n",
            "Epoch 136/300\n",
            "3/3 - 0s - loss: 0.0355 - 9ms/epoch - 3ms/step\n",
            "Epoch 137/300\n",
            "3/3 - 0s - loss: 0.0349 - 9ms/epoch - 3ms/step\n",
            "Epoch 138/300\n",
            "3/3 - 0s - loss: 0.0359 - 10ms/epoch - 3ms/step\n",
            "Epoch 139/300\n",
            "3/3 - 0s - loss: 0.0350 - 10ms/epoch - 3ms/step\n",
            "Epoch 140/300\n",
            "3/3 - 0s - loss: 0.0358 - 10ms/epoch - 3ms/step\n",
            "Epoch 141/300\n",
            "3/3 - 0s - loss: 0.0351 - 9ms/epoch - 3ms/step\n",
            "Epoch 142/300\n",
            "3/3 - 0s - loss: 0.0348 - 10ms/epoch - 3ms/step\n",
            "Epoch 143/300\n",
            "3/3 - 0s - loss: 0.0349 - 8ms/epoch - 3ms/step\n",
            "Epoch 144/300\n",
            "3/3 - 0s - loss: 0.0350 - 8ms/epoch - 3ms/step\n",
            "Epoch 145/300\n",
            "3/3 - 0s - loss: 0.0341 - 7ms/epoch - 2ms/step\n",
            "Epoch 146/300\n",
            "3/3 - 0s - loss: 0.0380 - 7ms/epoch - 2ms/step\n",
            "Epoch 147/300\n",
            "3/3 - 0s - loss: 0.0338 - 8ms/epoch - 3ms/step\n",
            "Epoch 148/300\n",
            "3/3 - 0s - loss: 0.0353 - 8ms/epoch - 3ms/step\n",
            "Epoch 149/300\n",
            "3/3 - 0s - loss: 0.0337 - 9ms/epoch - 3ms/step\n",
            "Epoch 150/300\n",
            "3/3 - 0s - loss: 0.0362 - 10ms/epoch - 3ms/step\n",
            "Epoch 151/300\n",
            "3/3 - 0s - loss: 0.0361 - 8ms/epoch - 3ms/step\n",
            "Epoch 152/300\n",
            "3/3 - 0s - loss: 0.0332 - 8ms/epoch - 3ms/step\n",
            "Epoch 153/300\n",
            "3/3 - 0s - loss: 0.0341 - 8ms/epoch - 3ms/step\n",
            "Epoch 154/300\n",
            "3/3 - 0s - loss: 0.0331 - 9ms/epoch - 3ms/step\n",
            "Epoch 155/300\n",
            "3/3 - 0s - loss: 0.0338 - 10ms/epoch - 3ms/step\n",
            "Epoch 156/300\n",
            "3/3 - 0s - loss: 0.0331 - 6ms/epoch - 2ms/step\n",
            "Epoch 157/300\n",
            "3/3 - 0s - loss: 0.0332 - 9ms/epoch - 3ms/step\n",
            "Epoch 158/300\n",
            "3/3 - 0s - loss: 0.0325 - 9ms/epoch - 3ms/step\n",
            "Epoch 159/300\n",
            "3/3 - 0s - loss: 0.0318 - 8ms/epoch - 3ms/step\n",
            "Epoch 160/300\n",
            "3/3 - 0s - loss: 0.0323 - 9ms/epoch - 3ms/step\n",
            "Epoch 161/300\n",
            "3/3 - 0s - loss: 0.0322 - 8ms/epoch - 3ms/step\n",
            "Epoch 162/300\n",
            "3/3 - 0s - loss: 0.0312 - 9ms/epoch - 3ms/step\n",
            "Epoch 163/300\n",
            "3/3 - 0s - loss: 0.0339 - 9ms/epoch - 3ms/step\n",
            "Epoch 164/300\n",
            "3/3 - 0s - loss: 0.0321 - 9ms/epoch - 3ms/step\n",
            "Epoch 165/300\n",
            "3/3 - 0s - loss: 0.0320 - 9ms/epoch - 3ms/step\n",
            "Epoch 166/300\n",
            "3/3 - 0s - loss: 0.0305 - 8ms/epoch - 3ms/step\n",
            "Epoch 167/300\n",
            "3/3 - 0s - loss: 0.0307 - 9ms/epoch - 3ms/step\n",
            "Epoch 168/300\n",
            "3/3 - 0s - loss: 0.0305 - 8ms/epoch - 3ms/step\n",
            "Epoch 169/300\n",
            "3/3 - 0s - loss: 0.0302 - 9ms/epoch - 3ms/step\n",
            "Epoch 170/300\n",
            "3/3 - 0s - loss: 0.0306 - 9ms/epoch - 3ms/step\n",
            "Epoch 171/300\n",
            "3/3 - 0s - loss: 0.0298 - 9ms/epoch - 3ms/step\n",
            "Epoch 172/300\n",
            "3/3 - 0s - loss: 0.0307 - 8ms/epoch - 3ms/step\n",
            "Epoch 173/300\n",
            "3/3 - 0s - loss: 0.0299 - 9ms/epoch - 3ms/step\n",
            "Epoch 174/300\n",
            "3/3 - 0s - loss: 0.0301 - 9ms/epoch - 3ms/step\n",
            "Epoch 175/300\n",
            "3/3 - 0s - loss: 0.0296 - 10ms/epoch - 3ms/step\n",
            "Epoch 176/300\n",
            "3/3 - 0s - loss: 0.0287 - 8ms/epoch - 3ms/step\n",
            "Epoch 177/300\n",
            "3/3 - 0s - loss: 0.0284 - 9ms/epoch - 3ms/step\n",
            "Epoch 178/300\n",
            "3/3 - 0s - loss: 0.0283 - 9ms/epoch - 3ms/step\n",
            "Epoch 179/300\n",
            "3/3 - 0s - loss: 0.0283 - 8ms/epoch - 3ms/step\n",
            "Epoch 180/300\n",
            "3/3 - 0s - loss: 0.0293 - 10ms/epoch - 3ms/step\n",
            "Epoch 181/300\n",
            "3/3 - 0s - loss: 0.0274 - 9ms/epoch - 3ms/step\n",
            "Epoch 182/300\n",
            "3/3 - 0s - loss: 0.0273 - 9ms/epoch - 3ms/step\n",
            "Epoch 183/300\n",
            "3/3 - 0s - loss: 0.0279 - 8ms/epoch - 3ms/step\n",
            "Epoch 184/300\n",
            "3/3 - 0s - loss: 0.0265 - 7ms/epoch - 2ms/step\n",
            "Epoch 185/300\n",
            "3/3 - 0s - loss: 0.0273 - 9ms/epoch - 3ms/step\n",
            "Epoch 186/300\n",
            "3/3 - 0s - loss: 0.0274 - 9ms/epoch - 3ms/step\n",
            "Epoch 187/300\n",
            "3/3 - 0s - loss: 0.0268 - 9ms/epoch - 3ms/step\n",
            "Epoch 188/300\n",
            "3/3 - 0s - loss: 0.0264 - 9ms/epoch - 3ms/step\n",
            "Epoch 189/300\n",
            "3/3 - 0s - loss: 0.0257 - 9ms/epoch - 3ms/step\n",
            "Epoch 190/300\n",
            "3/3 - 0s - loss: 0.0302 - 7ms/epoch - 2ms/step\n",
            "Epoch 191/300\n",
            "3/3 - 0s - loss: 0.0288 - 9ms/epoch - 3ms/step\n",
            "Epoch 192/300\n",
            "3/3 - 0s - loss: 0.0306 - 7ms/epoch - 2ms/step\n",
            "Epoch 193/300\n",
            "3/3 - 0s - loss: 0.0273 - 6ms/epoch - 2ms/step\n",
            "Epoch 194/300\n",
            "3/3 - 0s - loss: 0.0284 - 7ms/epoch - 2ms/step\n",
            "Epoch 195/300\n",
            "3/3 - 0s - loss: 0.0259 - 7ms/epoch - 2ms/step\n",
            "Epoch 196/300\n",
            "3/3 - 0s - loss: 0.0291 - 8ms/epoch - 3ms/step\n",
            "Epoch 197/300\n",
            "3/3 - 0s - loss: 0.0255 - 8ms/epoch - 3ms/step\n",
            "Epoch 198/300\n",
            "3/3 - 0s - loss: 0.0278 - 7ms/epoch - 2ms/step\n",
            "Epoch 199/300\n",
            "3/3 - 0s - loss: 0.0238 - 9ms/epoch - 3ms/step\n",
            "Epoch 200/300\n",
            "3/3 - 0s - loss: 0.0264 - 9ms/epoch - 3ms/step\n",
            "Epoch 201/300\n",
            "3/3 - 0s - loss: 0.0257 - 10ms/epoch - 3ms/step\n",
            "Epoch 202/300\n",
            "3/3 - 0s - loss: 0.0262 - 8ms/epoch - 3ms/step\n",
            "Epoch 203/300\n",
            "3/3 - 0s - loss: 0.0260 - 7ms/epoch - 2ms/step\n",
            "Epoch 204/300\n",
            "3/3 - 0s - loss: 0.0238 - 9ms/epoch - 3ms/step\n",
            "Epoch 205/300\n",
            "3/3 - 0s - loss: 0.0243 - 7ms/epoch - 2ms/step\n",
            "Epoch 206/300\n",
            "3/3 - 0s - loss: 0.0256 - 7ms/epoch - 2ms/step\n",
            "Epoch 207/300\n",
            "3/3 - 0s - loss: 0.0239 - 8ms/epoch - 3ms/step\n",
            "Epoch 208/300\n",
            "3/3 - 0s - loss: 0.0255 - 9ms/epoch - 3ms/step\n",
            "Epoch 209/300\n",
            "3/3 - 0s - loss: 0.0227 - 9ms/epoch - 3ms/step\n",
            "Epoch 210/300\n",
            "3/3 - 0s - loss: 0.0232 - 8ms/epoch - 3ms/step\n",
            "Epoch 211/300\n",
            "3/3 - 0s - loss: 0.0230 - 9ms/epoch - 3ms/step\n",
            "Epoch 212/300\n",
            "3/3 - 0s - loss: 0.0220 - 11ms/epoch - 4ms/step\n",
            "Epoch 213/300\n",
            "3/3 - 0s - loss: 0.0222 - 10ms/epoch - 3ms/step\n",
            "Epoch 214/300\n",
            "3/3 - 0s - loss: 0.0220 - 9ms/epoch - 3ms/step\n",
            "Epoch 215/300\n",
            "3/3 - 0s - loss: 0.0211 - 8ms/epoch - 3ms/step\n",
            "Epoch 216/300\n",
            "3/3 - 0s - loss: 0.0233 - 7ms/epoch - 2ms/step\n",
            "Epoch 217/300\n",
            "3/3 - 0s - loss: 0.0209 - 8ms/epoch - 3ms/step\n",
            "Epoch 218/300\n",
            "3/3 - 0s - loss: 0.0219 - 8ms/epoch - 3ms/step\n",
            "Epoch 219/300\n",
            "3/3 - 0s - loss: 0.0217 - 10ms/epoch - 3ms/step\n",
            "Epoch 220/300\n",
            "3/3 - 0s - loss: 0.0218 - 9ms/epoch - 3ms/step\n",
            "Epoch 221/300\n",
            "3/3 - 0s - loss: 0.0211 - 8ms/epoch - 3ms/step\n",
            "Epoch 222/300\n",
            "3/3 - 0s - loss: 0.0205 - 9ms/epoch - 3ms/step\n",
            "Epoch 223/300\n",
            "3/3 - 0s - loss: 0.0207 - 8ms/epoch - 3ms/step\n",
            "Epoch 224/300\n",
            "3/3 - 0s - loss: 0.0214 - 9ms/epoch - 3ms/step\n",
            "Epoch 225/300\n",
            "3/3 - 0s - loss: 0.0185 - 9ms/epoch - 3ms/step\n",
            "Epoch 226/300\n",
            "3/3 - 0s - loss: 0.0194 - 7ms/epoch - 2ms/step\n",
            "Epoch 227/300\n",
            "3/3 - 0s - loss: 0.0208 - 8ms/epoch - 3ms/step\n",
            "Epoch 228/300\n",
            "3/3 - 0s - loss: 0.0189 - 9ms/epoch - 3ms/step\n",
            "Epoch 229/300\n",
            "3/3 - 0s - loss: 0.0192 - 9ms/epoch - 3ms/step\n",
            "Epoch 230/300\n",
            "3/3 - 0s - loss: 0.0202 - 8ms/epoch - 3ms/step\n",
            "Epoch 231/300\n",
            "3/3 - 0s - loss: 0.0185 - 10ms/epoch - 3ms/step\n",
            "Epoch 232/300\n",
            "3/3 - 0s - loss: 0.0191 - 9ms/epoch - 3ms/step\n",
            "Epoch 233/300\n",
            "3/3 - 0s - loss: 0.0181 - 7ms/epoch - 2ms/step\n",
            "Epoch 234/300\n",
            "3/3 - 0s - loss: 0.0183 - 8ms/epoch - 3ms/step\n",
            "Epoch 235/300\n",
            "3/3 - 0s - loss: 0.0183 - 7ms/epoch - 2ms/step\n",
            "Epoch 236/300\n",
            "3/3 - 0s - loss: 0.0174 - 9ms/epoch - 3ms/step\n",
            "Epoch 237/300\n",
            "3/3 - 0s - loss: 0.0176 - 8ms/epoch - 3ms/step\n",
            "Epoch 238/300\n",
            "3/3 - 0s - loss: 0.0171 - 7ms/epoch - 2ms/step\n",
            "Epoch 239/300\n",
            "3/3 - 0s - loss: 0.0167 - 8ms/epoch - 3ms/step\n",
            "Epoch 240/300\n",
            "3/3 - 0s - loss: 0.0169 - 9ms/epoch - 3ms/step\n",
            "Epoch 241/300\n",
            "3/3 - 0s - loss: 0.0165 - 8ms/epoch - 3ms/step\n",
            "Epoch 242/300\n",
            "3/3 - 0s - loss: 0.0162 - 7ms/epoch - 2ms/step\n",
            "Epoch 243/300\n",
            "3/3 - 0s - loss: 0.0163 - 8ms/epoch - 3ms/step\n",
            "Epoch 244/300\n",
            "3/3 - 0s - loss: 0.0172 - 7ms/epoch - 2ms/step\n",
            "Epoch 245/300\n",
            "3/3 - 0s - loss: 0.0151 - 10ms/epoch - 3ms/step\n",
            "Epoch 246/300\n",
            "3/3 - 0s - loss: 0.0162 - 8ms/epoch - 3ms/step\n",
            "Epoch 247/300\n",
            "3/3 - 0s - loss: 0.0153 - 11ms/epoch - 4ms/step\n",
            "Epoch 248/300\n",
            "3/3 - 0s - loss: 0.0147 - 12ms/epoch - 4ms/step\n",
            "Epoch 249/300\n",
            "3/3 - 0s - loss: 0.0156 - 9ms/epoch - 3ms/step\n",
            "Epoch 250/300\n",
            "3/3 - 0s - loss: 0.0149 - 8ms/epoch - 3ms/step\n",
            "Epoch 251/300\n",
            "3/3 - 0s - loss: 0.0150 - 8ms/epoch - 3ms/step\n",
            "Epoch 252/300\n",
            "3/3 - 0s - loss: 0.0156 - 6ms/epoch - 2ms/step\n",
            "Epoch 253/300\n",
            "3/3 - 0s - loss: 0.0142 - 9ms/epoch - 3ms/step\n",
            "Epoch 254/300\n",
            "3/3 - 0s - loss: 0.0149 - 9ms/epoch - 3ms/step\n",
            "Epoch 255/300\n",
            "3/3 - 0s - loss: 0.0142 - 8ms/epoch - 3ms/step\n",
            "Epoch 256/300\n",
            "3/3 - 0s - loss: 0.0151 - 9ms/epoch - 3ms/step\n",
            "Epoch 257/300\n",
            "3/3 - 0s - loss: 0.0145 - 8ms/epoch - 3ms/step\n",
            "Epoch 258/300\n",
            "3/3 - 0s - loss: 0.0168 - 9ms/epoch - 3ms/step\n",
            "Epoch 259/300\n",
            "3/3 - 0s - loss: 0.0140 - 8ms/epoch - 3ms/step\n",
            "Epoch 260/300\n",
            "3/3 - 0s - loss: 0.0136 - 7ms/epoch - 2ms/step\n",
            "Epoch 261/300\n",
            "3/3 - 0s - loss: 0.0131 - 8ms/epoch - 3ms/step\n",
            "Epoch 262/300\n",
            "3/3 - 0s - loss: 0.0123 - 9ms/epoch - 3ms/step\n",
            "Epoch 263/300\n",
            "3/3 - 0s - loss: 0.0126 - 9ms/epoch - 3ms/step\n",
            "Epoch 264/300\n",
            "3/3 - 0s - loss: 0.0126 - 8ms/epoch - 3ms/step\n",
            "Epoch 265/300\n",
            "3/3 - 0s - loss: 0.0120 - 8ms/epoch - 3ms/step\n",
            "Epoch 266/300\n",
            "3/3 - 0s - loss: 0.0116 - 8ms/epoch - 3ms/step\n",
            "Epoch 267/300\n",
            "3/3 - 0s - loss: 0.0125 - 10ms/epoch - 3ms/step\n",
            "Epoch 268/300\n",
            "3/3 - 0s - loss: 0.0115 - 9ms/epoch - 3ms/step\n",
            "Epoch 269/300\n",
            "3/3 - 0s - loss: 0.0118 - 9ms/epoch - 3ms/step\n",
            "Epoch 270/300\n",
            "3/3 - 0s - loss: 0.0109 - 7ms/epoch - 2ms/step\n",
            "Epoch 271/300\n",
            "3/3 - 0s - loss: 0.0115 - 8ms/epoch - 3ms/step\n",
            "Epoch 272/300\n",
            "3/3 - 0s - loss: 0.0107 - 8ms/epoch - 3ms/step\n",
            "Epoch 273/300\n",
            "3/3 - 0s - loss: 0.0110 - 8ms/epoch - 3ms/step\n",
            "Epoch 274/300\n",
            "3/3 - 0s - loss: 0.0106 - 7ms/epoch - 2ms/step\n",
            "Epoch 275/300\n",
            "3/3 - 0s - loss: 0.0105 - 9ms/epoch - 3ms/step\n",
            "Epoch 276/300\n",
            "3/3 - 0s - loss: 0.0105 - 9ms/epoch - 3ms/step\n",
            "Epoch 277/300\n",
            "3/3 - 0s - loss: 0.0105 - 8ms/epoch - 3ms/step\n",
            "Epoch 278/300\n",
            "3/3 - 0s - loss: 0.0095 - 8ms/epoch - 3ms/step\n",
            "Epoch 279/300\n",
            "3/3 - 0s - loss: 0.0106 - 8ms/epoch - 3ms/step\n",
            "Epoch 280/300\n",
            "3/3 - 0s - loss: 0.0104 - 9ms/epoch - 3ms/step\n",
            "Epoch 281/300\n",
            "3/3 - 0s - loss: 0.0100 - 9ms/epoch - 3ms/step\n",
            "Epoch 282/300\n",
            "3/3 - 0s - loss: 0.0094 - 7ms/epoch - 2ms/step\n",
            "Epoch 283/300\n",
            "3/3 - 0s - loss: 0.0103 - 7ms/epoch - 2ms/step\n",
            "Epoch 284/300\n",
            "3/3 - 0s - loss: 0.0096 - 8ms/epoch - 3ms/step\n",
            "Epoch 285/300\n",
            "3/3 - 0s - loss: 0.0097 - 9ms/epoch - 3ms/step\n",
            "Epoch 286/300\n",
            "3/3 - 0s - loss: 0.0111 - 9ms/epoch - 3ms/step\n",
            "Epoch 287/300\n",
            "3/3 - 0s - loss: 0.0110 - 8ms/epoch - 3ms/step\n",
            "Epoch 288/300\n",
            "3/3 - 0s - loss: 0.0096 - 9ms/epoch - 3ms/step\n",
            "Epoch 289/300\n",
            "3/3 - 0s - loss: 0.0106 - 9ms/epoch - 3ms/step\n",
            "Epoch 290/300\n",
            "3/3 - 0s - loss: 0.0091 - 8ms/epoch - 3ms/step\n",
            "Epoch 291/300\n",
            "3/3 - 0s - loss: 0.0098 - 7ms/epoch - 2ms/step\n",
            "Epoch 292/300\n",
            "3/3 - 0s - loss: 0.0098 - 8ms/epoch - 3ms/step\n",
            "Epoch 293/300\n",
            "3/3 - 0s - loss: 0.0090 - 8ms/epoch - 3ms/step\n",
            "Epoch 294/300\n",
            "3/3 - 0s - loss: 0.0085 - 8ms/epoch - 3ms/step\n",
            "Epoch 295/300\n",
            "3/3 - 0s - loss: 0.0078 - 9ms/epoch - 3ms/step\n",
            "Epoch 296/300\n",
            "3/3 - 0s - loss: 0.0083 - 8ms/epoch - 3ms/step\n",
            "Epoch 297/300\n",
            "3/3 - 0s - loss: 0.0071 - 8ms/epoch - 3ms/step\n",
            "Epoch 298/300\n",
            "3/3 - 0s - loss: 0.0076 - 10ms/epoch - 3ms/step\n",
            "Epoch 299/300\n",
            "3/3 - 0s - loss: 0.0076 - 7ms/epoch - 2ms/step\n",
            "Epoch 300/300\n",
            "3/3 - 0s - loss: 0.0072 - 8ms/epoch - 3ms/step\n",
            "14/14 [==============================] - 0s 1ms/step\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.collections.PathCollection at 0x788339f990c0>"
            ]
          },
          "metadata": {},
          "execution_count": 24
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "seconds = time.time()\n",
        "print(\"Time in seconds since end of run:\", seconds)\n",
        "local_time = time.ctime(seconds)\n",
        "print(local_time)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 0
        },
        "id": "YyOarWssKyjN",
        "outputId": "64a2c250-6ff2-4bfe-d718-e63cc2a610e3"
      },
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Time in seconds since end of run: 1710188245.9778397\n",
            "Mon Mar 11 20:17:25 2024\n"
          ]
        }
      ]
    }
  ]
}